'''
Author: WangNing
Date: 2025-04-25 20:29:59
LastEditors: WangNing
LastEditTime: 2025-05-10 16:55:50
FilePath: \linetest\backend\config\config.py
Description: 系统配置文件
Copyright (c) 2025 by VGE, All Rights Reserved. 
'''
import psycopg2
import os

# 数据库配置
DB_CONFIG = {
    'host': '127.0.0.1',
    'database': 'task_manager',
    'user': 'postgres',
    'password': '123456'
}

# 提取数据库配置项用于直接访问
DB_HOST = DB_CONFIG['host']
DB_NAME = DB_CONFIG['database']
DB_USER = DB_CONFIG['user']
DB_PASSWORD = DB_CONFIG['password']

# OpenAI 模型配置
OPENAI_MODEL = "gpt-4"

# DeepSeek 模型配置
DEEPSEEK_MODEL = "deepseek-chat"
DEEPSEEK_API_BASE = "https://api.deepseek.com/v1"

# AI模型提供商
AI_PROVIDERS = {
    'openai': {
        'name': 'OpenAI',
        'models': ['gpt-3.5-turbo', 'gpt-4']
    },
    'deepseek': {
        'name': 'DeepSeek',
        'models': ['deepseek-chat', 'deepseek-coder']
    }
}

# 任务状态配置
TASK_STATUS = {
    'PENDING': 'pending',  # 待执行
    'IN_PROGRESS': 'in_progress',  # 执行中
    'COMPLETED': 'completed',  # 已完成
    'FAILED': 'failed',  # 执行失败
    'BLOCKED': 'blocked',  # 被阻塞
    'REVIEWING': 'reviewing',  # 审核中
    'APPROVED': 'approved',  # 已审核通过
    'REJECTED': 'rejected'   # 审核未通过
}

# 任务拆分配置
TASK_BREAKDOWN_CONFIG = {
    'MAX_DEPTH': 5,           # 任务拆分最大深度
    'MIN_ATOMIC_HOURS': 0.5,  # 原子任务最小估计时间（小时）
    'MAX_ATOMIC_HOURS': 4     # 原子任务最大估计时间（小时）
}

# 系统通知配置
NOTIFICATION_CONFIG = {
    'ENABLE_EMAIL': False,     # 是否启用邮件通知
    'ENABLE_WEBHOOK': False,   # 是否启用webhook通知
    'EMAIL_SENDER': 'notifications@taskmanager.com',
    'WEBHOOK_URL': 'https://your-webhook-url.com/hook'
}

# 从数据库获取API密钥
def get_api_keys(username=None):
    """
    从数据库获取API密钥
    :param username: 用户名，如果提供则获取特定用户的API密钥，否则获取系统默认API密钥
    :return: 包含API密钥的字典
    """
    try:
        conn = psycopg2.connect(
            host=DB_HOST,
            user=DB_USER,
            password=DB_PASSWORD,
            database=DB_NAME
        )
        cursor = conn.cursor()
        
        if username:
            # 获取特定用户的API密钥
            cursor.execute("""
                SELECT openai_api_key, deepseek_api_key 
                FROM user_settings 
                WHERE username = %s
            """, (username,))
        else:
            # 获取admin用户的API密钥作为系统默认值
            cursor.execute("""
                SELECT openai_api_key, deepseek_api_key 
                FROM user_settings 
                WHERE username = 'admin'
            """)
            
        result = cursor.fetchone()
        
        if result:
            openai_key, deepseek_key = result
            return {
                'openai_api_key': openai_key or '',
                'deepseek_api_key': deepseek_key or ''
            }
        else:
            return {
                'openai_api_key': '',
                'deepseek_api_key': ''
            }
    except Exception as e:
        print(f"获取API密钥时出错: {str(e)}")
        return {
            'openai_api_key': '',
            'deepseek_api_key': ''
        }
    finally:
        if cursor:
            cursor.close()
        if conn:
            conn.close()

# 获取环境变量或数据库中的API密钥
def get_openai_api_key(username=None):
    """获取OpenAI API密钥"""
    # 优先使用环境变量
    api_key = os.getenv("OPENAI_API_KEY")
    if api_key:
        return api_key
    
    # 其次使用数据库中的设置
    keys = get_api_keys(username)
    return keys.get('openai_api_key', '')

def get_deepseek_api_key(username=None):
    """获取DeepSeek API密钥"""
    # 优先使用环境变量
    api_key = os.getenv("DEEPSEEK_API_KEY")
    if api_key:
        return api_key
    
    # 其次使用数据库中的设置
    keys = get_api_keys(username)
    return keys.get('deepseek_api_key', '')
 